<?php
namespace App\Admin\Controllers\Traits\WxRealtimeTraits;

use App\Jobs\RealtimePostsDegreeJob;
use App\Wen\Utils\Settings;
use App\Wen\Utils\SiteUtils;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Widgets\Tooltip;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;

trait formPostTrait{
    public function index_post(Content $content)
    {
        return $content->title('热帖榜')
//            ->body($this->buildPreviewButton())
//            ->body($this->newline())
            ->body(
                <<<HTML
<div class="card">{$this->form_post()->render()}</div>
HTML
            );
    }
    protected function form_post(){
        $form = new Form();
        $form->confirm('您确定要提交表单吗？', 'content');
        $form->disableResetButton();
        $form->html(function () {
            return '';
        }, '<b>一、计算公式调整</b>');
        $form->html(function () {
            return '<img src="https://img.mini.minisns.cn/hbx/gognshis.png" /><br/>H：是一个内容的热度<br/>
W：是一个文章的评论数，喜欢数加权求和的数值<br/>
I：文章作者的影响因子。这个影响因子与作者本身的历史发表有关<br/>
G：一个衰减的重力参数<br/>
T：文章发布以来的时长浮点数（小时）<br/>';
        }, '');
        $form->html(function () {
            return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">说明一下：如果你发现热门的内容时间比较早，则可以加大该参数，每一次改变该参数，都会引起一定的计算，别太频繁就行。</div>';
        }, '');
        $res12 = __system__paycode__tip__(12);
        Tooltip::make('.mini_global_admin_open_not_support_tip')
            ->bottom()
            ->title($res12['tip']);
        $form->decimal('realtime_post_para_g', '衰减参数G')->help($res12['text'].'注意：因为是指数，所以应该是零点几的去调为好，默认1.2，数值越大，就越会衰减旧内容热度，让新发表的升上来')->default(Settings::get('realtime_post_para_g', 1.2));
        $form->html(function () {
            return '';
        }, '<b>二、热帖榜</b>');
        $form->html(function () {
            return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">说明一下：默认5天之内的热度增量之和进行排序，前10名作为10大热帖，如果你的产生内容较少，可以设置更长的时间。</div>';
        }, '');
        $form->number('realtime_post_degree_increment_keep_days', '增量保持天数')->help('默认笔记热度增量数据保存5天，你可以设置更长的时间，以便有足够多的数据。不是实时生效，15分钟系统系统响应一次')->default(Settings::get('realtime_post_degree_increment_keep_days', 5));
        $form->number('realtime_post_degree_increment_hot_num', '热标识最大个数')->help('热标识是根据当前3个小时增速最快的几个')->default(Settings::get('realtime_post_degree_increment_hot_num', 3));
        $form->number('realtime_post_degree_increment_hot_num_in_hours', '热标识时间范围/小时')->help('上面举例是5个小时，这里可以配置其他时长，如果你的社区活跃，就配置更短的时间')->default(Settings::get('realtime_post_degree_increment_hot_num_in_hours', 3));
        $form->html(function () {
            return '';
        }, '<b>三、其他应用</b>');
        $form->number('realtime_post_list_shows_top', '列表页排名最低提示名次')->help('就是比如首页提示：热帖榜排第x名，最大值50，0代表不显示')->default(Settings::get('realtime_post_list_shows_top', 10));
        $form->action('realtime/action/post');
        return $form;
    }

    public function post(Request $request){
        SiteUtils::forget_config_data();
        $old_g = Settings::get('realtime_post_para_g');
        $new_g = $request->realtime_post_para_g;
        if(_empty_($old_g) || $old_g != $new_g){
            RealtimePostsDegreeJob::dispatch(1000);
        }
        Settings::set('realtime_post_para_g', $request->input('realtime_post_para_g'), true);
        Settings::set('realtime_post_degree_increment_keep_days', $request->input('realtime_post_degree_increment_keep_days'), true);
        Settings::set('realtime_post_degree_increment_hot_num', $request->input('realtime_post_degree_increment_hot_num'), true);
        Settings::set('realtime_post_degree_increment_hot_num_in_hours', $request->input('realtime_post_degree_increment_hot_num_in_hours'), true);

        Settings::set('realtime_post_list_shows_top', _between_($request->input('realtime_post_list_shows_top'), 0, 50), true);


        return $this->response()->success('成功！');
    }

}
